package com.xyz.app.config;


import com.xyz.app.servlet.NoSessionCalculateKaptchaServlet;
import com.xyz.kaptcha.CalculateKaptchaServlet;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextListener;

import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Configuration
public class FilterConfig {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/
//    @Bean
//    public FilterRegistrationBean xssFilterRegistration(){
//        FilterRegistrationBean registration = new FilterRegistrationBean(new XssFilter());
//        registration.addUrlPatterns("/*");
//        registration.setName("xssFilter");
//        registration.setOrder(1);
//        return registration;
//    }

    @Bean
    public ServletListenerRegistrationBean<EventListener> requestContextListener(){
        ServletListenerRegistrationBean<EventListener> registrationBean
                =new ServletListenerRegistrationBean<>();
        registrationBean.setListener(new RequestContextListener());
        return registrationBean;
    }

//    @Bean
//    public FilterRegistrationBean shiroFilterRegistration() {
//        FilterRegistrationBean registration = new FilterRegistrationBean(new DelegatingFilterProxy("shiroFilter"));
//        registration.addUrlPatterns("/*"); //
//        registration.setName("shiroFilter");
//        registration.setOrder(1);
//        return registration;
//    }

//    @Bean
//    public FilterRegistrationBean tokenFilter() {
//        FilterRegistrationBean registration = new FilterRegistrationBean();
//        registration.setFilter(new TokenFilter());
//        registration.addUrlPatterns("*.html","*.json"); //
//        registration.setName("tokenFilter");
//        registration.setOrder(2);
//        return registration;
//    }

    @Bean
    public ServletRegistrationBean kaptaServletRegistration(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CalculateKaptchaServlet(),"/kaptcha.vjpg");
        Map<String,String> kaptchaParams = new HashMap<String,String>();

        kaptchaParams.put("kaptcha.border", "no");
        kaptchaParams.put("kaptcha.image.width","185");
        kaptchaParams.put("kaptcha.image.height","80");
        kaptchaParams.put("kaptcha.textproducer.impl","com.xyz.kaptcha.CalculateTextProducer");
        kaptchaParams.put("kaptcha.textproducer.font.color", "27,101,167");
        kaptchaParams.put("kaptcha.textproducer.char.length", "4");
        kaptchaParams.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        kaptchaParams.put("kaptcha.textproducer.font.size", "50");
        kaptchaParams.put("kaptcha.textproducer.char.space", "2");
        kaptchaParams.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        kaptchaParams.put("kaptcha.noise.color","27,101,167");
        servletRegistrationBean.setInitParameters(kaptchaParams);
        return servletRegistrationBean;
    }

    @Bean
    public ServletRegistrationBean kaptchaNoSessionServletRegistration(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new NoSessionCalculateKaptchaServlet(),"/kaptchaNoSession.vjpg");
        Map<String,String> kaptchaParams = new HashMap<String,String>();

        kaptchaParams.put("kaptcha.border", "no");
        kaptchaParams.put("kaptcha.image.width","185");
        kaptchaParams.put("kaptcha.image.height","80");
        kaptchaParams.put("kaptcha.textproducer.impl","com.xyz.kaptcha.CalculateTextProducer");
        kaptchaParams.put("kaptcha.textproducer.font.color", "27,101,167");
        kaptchaParams.put("kaptcha.textproducer.char.length", "4");
        kaptchaParams.put("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        kaptchaParams.put("kaptcha.textproducer.font.size", "50");
        kaptchaParams.put("kaptcha.textproducer.char.space", "2");
        kaptchaParams.put("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        kaptchaParams.put("kaptcha.noise.color","27,101,167");
        servletRegistrationBean.setInitParameters(kaptchaParams);
        return servletRegistrationBean;
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
